【问题标题】:Accessing a child element in webdriver访问 webdriver 中的子元素
【发布时间】:2014-09-27 04:31:14
【问题描述】:

HTML 代码:

<pre> 
<span class="cm-string">"userId"</span>
 ":" 
<span class="cm-string">"abc"</span>
 ","
 </pre>
<pre>
 <span class="cm-string">"password"</span>
 ":" 
<span class="cm-string">"xyz"</span> 
"," 
</pre>

我需要从 abc 值访问 xyz 值。 xyz 的值在每次登录时都会不断变化,所以我需要一个来自 abc 的 xpath。 我尝试了以下代码,但失败了:

driver.findElement(By.xpath("//span[. = '\"abc\"']/followingsibling::span[2]");

【问题讨论】:

  • 值总是在第二个&lt;pre&gt;,第二个&lt;span&gt;?如果是这样,我会编写一个使用这些位置来获取元素的查询。
  • 是的,你是对的,使用第二个
    ,第二个 ... 从第一个 
    ,第二个  访问
                    
                  
                    
                            
                

标签: java html selenium xpath selenium-webdriver


【解决方案1】:

不确定这是否适用于 Selenium,但遵循 xpath

//span[. = '"userId"']/ancestor::pre/following-sibling::*/span[2]/text()

得到结果

"xyz"

使用 Selenium 获取文本,表达式似乎是

driver.getText(By.xpath("//span[. = '"userId"']/ancestor::pre/following-sibling::*/span[2]");

http://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebElement.html#getText
getElement 需要一个节点而不是文本,getText 应该产生元素的文本。

【讨论】:

  • ERROR:Exception in thread "main" org.openqa.selenium.InvalidSelectorException: invalid selector: The result of the xpath expression "//span[. = '\"abc\"']/ancestor ::pre/following-sibling::*/span[2]/text()" 是:[对象文本]。它应该是一个元素。
  • @user3174553 您希望获得整个跨度还是仅获得值?
  • 只是值 -"xyz"
  • @user3174553 更新了我的答案,但它有点猜测,因为 xpath 是正确的,现在只有一个硒问题,因为 getElement 只接受一个元素(跨度),而不是文本。 “猜测”,因为我还不知道“getText”是否与“By.xpath”或例如结合使用。如果你应该先获取元素,然后获取文本。
猜你喜欢
  • 2012-02-08
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 2011-10-25
相关资源
最近更新 更多