selenium webdriver - 如果元素的文本包含 Unicode 字符,则 xpath 定位器不起作用
selenium webdriver - xpath locator not working if element's text contains Unicode Characters
我正在尝试 select 菜单中包含的选项。它不是 select 菜单,但它的样式显示为这样。无论如何,如果菜单中包含的文本是英文的,我可以 select 就可以了。麻烦的是,我需要 select 的文本是法语,所以它包含带有变音符的字母 "c"。 Webdriver 似乎无法识别它。我在这里错过了什么吗?这是一个代码片段:
<div id="Language"><span class="combobox"><input name="" type="text" autocomplete="off" label="" placeholder="" class=""><span class="combobox-button" style="-webkit-user-select: none;">▼</span><div class="menu menu-vertical" role="menu" aria-haspopup="true" style="-webkit-user-select: none; left: 392px; top: 107px; display: none;"><div class="menuitem" role="menuitem" id=":15" style="-webkit-user-select: none;"><div class="menuitem-content">Français</div></div></div></span></div>
我正在使用 xpath 定位器通过文本获取元素,所以我尝试这个并不愉快:
Iwebelement FrenchOption = driver.findelement(By.XPath("//div[text()='Français']"));
这个 xpath 定位器可以很好地查找英文文本。我已经通过 ID 找到了可以正常工作的元素,但是元素 ID 会发生变化,所以我想让它正常工作,这样我就不必不断更改 ID
Am I missing something here?
是的,我认为是:
<div class="menuitem-content">Français</div>
缺少"a"
driver.findelement(By.XPath("//div[text()='Françis']"));
编辑:
至少在 Java 环境中 Webdriver 可以 处理 Unicode。这对我有用(在这种情况下,驱动程序是 FirefoxDriver
的一个实例):
driver.get("https://fr.wikipedia.org/wiki/Mot%C3%B6rhead");
WebElement we = driver.findElement(By.xpath("//h1[contains(., Motörhead)]"));
System.out.println(driver.getTitle() + " is showing " + we.isDisplayed());
打印出来:
Motörhead — Wikipédia is showing true
因此,如果您在编码方面遇到问题,可能是由于源文件的编码问题。
事实上你也打错了提示。如果您跨不同的编码复制和粘贴 unicode 字符,结果是不可预知的。在这种情况下(只是猜测)由于转换不当,cedilla 可能已经吃掉了 "a".
我正在尝试 select 菜单中包含的选项。它不是 select 菜单,但它的样式显示为这样。无论如何,如果菜单中包含的文本是英文的,我可以 select 就可以了。麻烦的是,我需要 select 的文本是法语,所以它包含带有变音符的字母 "c"。 Webdriver 似乎无法识别它。我在这里错过了什么吗?这是一个代码片段:
<div id="Language"><span class="combobox"><input name="" type="text" autocomplete="off" label="" placeholder="" class=""><span class="combobox-button" style="-webkit-user-select: none;">▼</span><div class="menu menu-vertical" role="menu" aria-haspopup="true" style="-webkit-user-select: none; left: 392px; top: 107px; display: none;"><div class="menuitem" role="menuitem" id=":15" style="-webkit-user-select: none;"><div class="menuitem-content">Français</div></div></div></span></div>
我正在使用 xpath 定位器通过文本获取元素,所以我尝试这个并不愉快:
Iwebelement FrenchOption = driver.findelement(By.XPath("//div[text()='Français']"));
这个 xpath 定位器可以很好地查找英文文本。我已经通过 ID 找到了可以正常工作的元素,但是元素 ID 会发生变化,所以我想让它正常工作,这样我就不必不断更改 ID
Am I missing something here?
是的,我认为是:
<div class="menuitem-content">Français</div>
缺少"a"
driver.findelement(By.XPath("//div[text()='Françis']"));
编辑:
至少在 Java 环境中 Webdriver 可以 处理 Unicode。这对我有用(在这种情况下,驱动程序是 FirefoxDriver
的一个实例):
driver.get("https://fr.wikipedia.org/wiki/Mot%C3%B6rhead");
WebElement we = driver.findElement(By.xpath("//h1[contains(., Motörhead)]"));
System.out.println(driver.getTitle() + " is showing " + we.isDisplayed());
打印出来:
Motörhead — Wikipédia is showing true
因此,如果您在编码方面遇到问题,可能是由于源文件的编码问题。
事实上你也打错了提示。如果您跨不同的编码复制和粘贴 unicode 字符,结果是不可预知的。在这种情况下(只是猜测)由于转换不当,cedilla 可能已经吃掉了 "a".