selenium webdriver - 如果元素的文本包含Unicode字符,则xpath定位器不起作用

时间:2015-06-15 16:49:10

标签: selenium xpath unicode selenium-webdriver webdriver

我试图选择菜单中包含的选项。它不是一个选择菜单,但它的样式显示为这样。无论如何,如果菜单中包含的文本是英文的,我可以选择它。麻烦的是,我需要选择的文字是法语,所以它包含字母" c"与cedilla。 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

1 个答案:

答案 0 :(得分:1)

  

我在这里错过了什么吗?

是的,我想是的:

<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显示真实

因此,如果您在编码方面遇到问题,可能是由于您对源文件进行了编码。

事实上你也提到了错字提示。如果您跨不同的编码复制并粘贴unicode字符,则结果是不可预测的。在这种情况下(只是猜测)由于转换不良,cedilla可能已经吃掉了“a”。