读取单选按钮的标签并使用 Selenium 确认值
Read the label of a Radio Button and confirm the value with Selenium
正如标题所暗示的那样。我正在确认单选按钮的值是否正确。
HTML如下:
<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位如下:
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 statement" 将始终打印 "Oops: somethings not right with the wording"
有帮助吗???
使用当前的 HTML 代码,您将无法确认单选按钮的标签值,因为单选按钮是作为输入标签实现的,这是一个自关闭标签,因此 [= input
上的 11=] 将始终 return null
。您将需要一个像 div 这样的容器标签来包含输入标签(单选按钮)和标签。参考:Self-closed versus Container Tags
问题不在于 Selenium 代码,实际上是由于不正确的 HTML 片段。如下更改 HTML 可以解决此问题:
<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
将为您提供单选按钮标签的值。 Css 选择器可以是 div>input[value='First']
。如果您能解决问题,请告诉我。
我同意@Manu 的观点,HTML 片段很差,但您可以使用 javascript childNodes 从节点获取文本
childNodes属性return是一个节点的子节点的集合,作为一个 NodeList 对象。
集合中的节点按照它们在源代码中出现的顺序排序,可以通过索引号访问。索引从 0 开始。
使用executescript
在当前选定帧的上下文中执行JavaScript或window
下面是java
中的例子
不要忘记添加 return,因为您需要 return 调用者的值
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());
尝试上面的脚本它会return"Economy class"
在上面的脚本中我们使用childnode 属性来获取所有的childnodes
字体标签 <font face="Arial, Helvetica, sans-serif">
类似地,您可以通过替换子节点索引来获取其他文本节点
子节点[4]----->"Business class"
子节点[8]------>"First class"
我试过上面的代码,它工作正常
希望这对您有所帮助...如果您有任何疑问,请回来
正如标题所暗示的那样。我正在确认单选按钮的值是否正确。
HTML如下:
<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位如下:
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 statement" 将始终打印 "Oops: somethings not right with the wording"
有帮助吗???
使用当前的 HTML 代码,您将无法确认单选按钮的标签值,因为单选按钮是作为输入标签实现的,这是一个自关闭标签,因此 [= input
上的 11=] 将始终 return null
。您将需要一个像 div 这样的容器标签来包含输入标签(单选按钮)和标签。参考:Self-closed versus Container Tags
问题不在于 Selenium 代码,实际上是由于不正确的 HTML 片段。如下更改 HTML 可以解决此问题:
<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
将为您提供单选按钮标签的值。 Css 选择器可以是 div>input[value='First']
。如果您能解决问题,请告诉我。
我同意@Manu 的观点,HTML 片段很差,但您可以使用 javascript childNodes 从节点获取文本
childNodes属性return是一个节点的子节点的集合,作为一个 NodeList 对象。
集合中的节点按照它们在源代码中出现的顺序排序,可以通过索引号访问。索引从 0 开始。
使用executescript
在当前选定帧的上下文中执行JavaScript或window
下面是java
中的例子不要忘记添加 return,因为您需要 return 调用者的值
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());
尝试上面的脚本它会return"Economy class"
在上面的脚本中我们使用childnode 属性来获取所有的childnodes
字体标签 <font face="Arial, Helvetica, sans-serif">
类似地,您可以通过替换子节点索引来获取其他文本节点
子节点[4]----->"Business class"
子节点[8]------>"First class"
我试过上面的代码,它工作正常
希望这对您有所帮助...如果您有任何疑问,请回来