首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取Radio的标签并使用Selenium确认值

问读取Radio的标签并使用Selenium确认值
EN

Stack Overflow用户
提问于 2015-07-06 08:43:54
回答 2查看 1.3K关注 0票数 2

顾名思义。我想确认的是,无线电按钮的价值是正确的。

HTML如下:

代码语言:javascript
复制
<input type="radio" value="Coach" name="servClass" checked="">
<font face="Arial, Helvetica, sans-serif">
Economy class
<br>
<input type="radio" value="Business" name="servClass">
Business class
<br>
<input type="radio" value="First" name="servClass">
First class
</font>

selenium位如下:

代码语言:javascript
复制
    String expectedServiceClass = "First class";

    String actualServiceClass = driver.findElement(By.cssSelector("input[value='First']")).getText();


    if (actualserviceClass.equals(expectedServiceClass)){
        System.out.println("Correct Wording");

    }else{
        System.out.println("Oops: somethings not right with the    wording");
        //close Firefox
        driver.close();

    // exit the program explicitly
        System.exit(0); 
    }

但是,当执行此操作时,actualServiceClass变量不包含任何值,即null,因此"if语句“将始终打印"Oops:某些措辞不正确的东西”。

有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-06 09:21:08

使用当前的HTML代码,您将无法确定单选按钮的标签值,因为单选按钮是作为输入标记实现的,即自关闭标记,因此getText() on input将始终返回null。您需要像div这样的容器标记来包含输入标签(单选按钮)和标签。参考:自封闭与容器标记

问题不在于Selenium代码,实际上是由于HTML代码片段不正确所致。按照下面的方式更改HTML可以解决这个问题:

代码语言:javascript
复制
<font face="Arial, Helvetica, sans-serif">
  <div>
    <input type="radio" value="Coach" name="servClass" checked="">
    Economy class
    <br>
  </div>
  <div>
    <input type="radio" value="Business" name="servClass">
    Business class
    <br>
  </div>
  <div>
    <input type="radio" value="First" name="servClass">
    First class
  </div>

​

在此之后,只需更改Css或XPath以找到div,就会给出Radio标签的值。Css选择器可以是div>input[value='First']。如果你能解决这个问题,请告诉我。

票数 2
EN

Stack Overflow用户

发布于 2015-07-06 10:17:54

我同意@Manu HTML片段很差,但是您可以使用javascript childNodes从节点获取文本

childNodes属性作为NodeList对象返回节点子节点的集合。

集合中的节点按源代码中的顺序排序,并可按索引号访问。索引从0开始。

使用executescript在当前选定的框架或窗口的上下文中执行JavaScript

下面的是java中的一个示例

不要忘记添加返回,因为您需要将值返回给调用方。

代码语言:javascript
复制
WebElement element = driver.findElement(By.xpath("//input[@value='Coach']/following-sibling::font"));

String node_text=(String)((JavascriptExecutor)driver).executeScript("return arguments[0].childNodes[0].nodeValue",element);

System.out.println(node_text.trim());

试试上面的脚本,它会返回“经济舱”。

在上面的脚本中,我们使用子节点属性来获取字体标记<font face="Arial, Helvetica, sans-serif">的所有子节点。

类似地,您可以通过替换子节点索引来获取其他文本节点。

儿童节4-“公务舱”

儿童Nodes8-“头等舱”

我试过上面的代码,它运行得很好

如果您有任何疑问,希望这有助于you...kindly返回。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31241321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档