使用类和文本查找由 Ajax-json 响应加载的元素的 xpath
Posted
技术标签:
【中文标题】使用类和文本查找由 Ajax-json 响应加载的元素的 xpath【英文标题】:Finding xpath for an element loaded by Ajax-json response using class and text 【发布时间】:2014-11-24 21:44:03 【问题描述】:我有一个类似的元素
<td class="google-visualization-table-th gradient google-visualization-table-sorthdr">
Project Name
<span class="google-visualization-table-sortind">▼</span>
</td>
我试过了
driver.findElement(By.xpath("//td[contains(@class, 'google-visualization-table-th') and normalize-space(text()) = 'Project Name']")
但它不起作用。基本上它的列标题代码,我需要识别每个列标题并打印标题是否存在。
【问题讨论】:
你能详细说明“不工作”吗? @Mathias 它没有捕捉到所需的元素。给出“找不到元素错误” 【参考方案1】:现在解决了,元素没有被识别,因为它们被加载到 iframe 中。我使用以下代码切换到 iframe,然后进行常规操作来跟踪元素。
WebDriverWait wait = new WebDriverWait(driver, 200);
By by = By.id("iframe id");
try
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(by));
感谢大家的帮助。
【讨论】:
【参考方案2】:我们不知道您使用的是哪个版本的 XPath,但根据具体版本,text()
的含义不同。
我怀疑span
(奇怪的字符▼)的文字内容也是td/text()
的一部分。这是因为text()
不是的意思是:
返回上下文节点的rext节点
在这种情况下,它意味着:
返回上下文节点的文本节点及其所有后代的文本节点。
在谓词的后半部分也使用contains()
:
//td[contains(@class, 'google-visualization-table-th') and contains(.,'Project Name')]
【讨论】:
谢谢,但它不起作用,仍然给出同样的错误。要添加的一件事是页面的内容是由 AJAX-JSON 响应生成的,这需要 3 分钟才能加载,为此我添加了 MySuite.driver.manage().timeouts().implicitlyWait(200, TimeUnit.秒);以上是关于使用类和文本查找由 Ajax-json 响应加载的元素的 xpath的主要内容,如果未能解决你的问题,请参考以下文章