如何实现// * [contains(text(),'“ example”')]为Selenium Webdriver构建动态内容的Xpath :?

时间:2018-07-18 15:31:39

标签: selenium selenium-webdriver xpath webdriver selenium-chromedriver

我正在研究Selenium Webdriver,并且提出了动态对象作为DOM ID的问题。我的一个实例被生成为ID,如下所示:

"//*[@id="888itsAnExampleBoi573"]/div[1]/div[2]", 

我需要单击示例项目中的按钮以使东西发生。

因为我无法预测动态内容的objectID,但是,我希望能够这样做:

//*[contains(text(), 'example')]/div[1]/div[2]. 

我尝试这样做,但是返回了一个奇怪的错误:

Caused by: org.openqa.selenium.InvalidSelectorException: invalid 
    selector: Unable to locate an element with the xpath expression 
    //*[contains(text(), 'example')]/div/div/div[1]/div[3]/div 
    because of the following error:
    SyntaxError: Failed to execute 'evaluate' on 'Document': 
    The string '//*[contains(text(), 'example')]/div/div/div[1]/div[3]/div' 
    is not a valid XPath expression.  

在另一个具有文本元素超链接的元素上,我已经能够使用contains(text())解决问题,所以我相信我已经正确设置了格式。

我已经尝试了一些其他方法来解决此问题,但是如何解决这个问题有些茫然。有没有人有任何想法或资源向我指出?还是更好的解决方案?

2 个答案:

答案 0 :(得分:0)

此错误消息...

$ sudo yum install fontconfig

...表示Locator Strategy不是有效的XPath表达式。

表达式:

  • Caused by: org.openqa.selenium.InvalidSelectorException: invalid selector: Unable to locate an element with the xpath expression //*[contains(text(), 'example')]/div/div/div[1]/div[3]/div because of the following error: SyntaxError: Failed to execute 'evaluate' on 'Document': The string '//*[contains(text(), 'example')]/div/div/div[1]/div[3]/div' is not a valid XPath expression.
  • '//*[contains(text(), 'example')]/div/div/div[1]/div[3]/div'

无效,因为 "//*[contains(text(), "example")]/div/div/div[1]/div[3]/div" '' 出现在 xpath 的多个位置。

解决方案

作为以下内容的有效替代动态 xpath

""

将是:

"//*[@id="888itsAnExampleBoi573"]/div[1]/div[2]"

答案 1 :(得分:0)

为了解决这个问题,有时您必须提出问题。当我一直在使用相对的XPATH时,我一直在冒充文本div本身就是我可以访问不是div子元素的元素的伪装。他们实际上只是松散的联系!

gcc

我最终安装了 Chropath 并在DOM周围进行爬网,找到其中包含文本的div,并在此语句中使用了相对路径。如果您遇到类似这样的问题,有时我建议您确保您提出的问题是正确的。