我正在研究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())解决问题,所以我相信我已经正确设置了格式。
我已经尝试了一些其他方法来解决此问题,但是如何解决这个问题有些茫然。有没有人有任何想法或资源向我指出?还是更好的解决方案?
答案 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,并在此语句中使用了相对路径。如果您遇到类似这样的问题,有时我建议您确保您提出的问题是正确的。