Java Twitter中的Get.text()
我正在尝试获取twitter中登录错误消息的文本 Twitter此部分的HTML代码:Java Twitter中的Get.text(),java,selenium,Java,Selenium,我正在尝试获取twitter中登录错误消息的文本 Twitter此部分的HTML代码: <div class="message-inside"> <span class="message-text">The email or password doesn't match.</span> </div> 其中xpath是Mozilla的inspect元素给出的xpath。但是,字符串消息为空 PS:在调用getText时,消息没有隐藏,所
<div class="message-inside">
<span class="message-text">The email or password doesn't match.</span>
</div>
其中xpath是Mozilla的inspect元素给出的xpath。但是,字符串消息为空
PS:在调用getText时,消息没有隐藏,所以我认为这不是问题所在
编辑:我还尝试了.getAttribute(“innerHTML”)而不是.getText(),这也失败了。尝试将路径更改为div[1]或删除路径中的一个“/div”。尝试将路径更改为div[1]或删除路径中的一个“/div”。好的,因此显然在我尝试获取文本时错误消息被隐藏了。我告诉Selenium在获取文本之前(以及输入错误登录后)等待一段时间:
它能毫无困难地得到文本。如果您试图获取以前隐藏的文本,请告诉Selenium稍等,这样您就可以确保它不再隐藏。好的,显然在我尝试获取文本时错误消息被隐藏了。我告诉Selenium在获取文本之前(以及输入错误登录后)等待一段时间:
而且它能够毫不费力地获得文本。如果您试图获取以前隐藏的文本,请告诉Selenium稍等片刻,以确保它不再隐藏。永远不要解决睡眠问题:它不可靠(如果元素出现的时间比睡眠时间晚1毫秒怎么办?),会减慢测试速度(若元素在睡眠开始后10毫秒出现会怎样?你们浪费了990毫秒,在许多测试中它加起来了) 相反,请使用显式等待模式等待文本出现:
WebDriverWait wait = new WebDriverWait(driver, 10); // wait for max 10 sec
String message = wait.until(ExpectedConditions. visibilityOfElementLocated(By.xpath("/html/body/div[2]/div/div/span")).getText();
通过这种方式,您可以告诉selenium最多等待元素10秒,但如果元素出现在之前,它将返回得更快
另一件事:xpath之类的/html/body/div[2]/div/div/span
不是您通常应该使用的东西(有些情况下是不可避免的,但很少使用)。原因:
- 首先,通过查看路径,您无法判断您选择的是什么。因此,如果HTML发生变化,您将很难弄清楚该语句以前做了什么
- 按索引选择(例如,
)是非常容易破坏的:只需在所选div的上方再出现一个div,xpath就会破坏div[2]
- 你很少需要选择绝对路径。专注于重要的部分
<div class="alert-messages" id="message-drawer" style="top: -40px;">
<div class="message ">
<div class="message-inside">
<span class="message-text"></span>
</div>
</div>
</div>
它告诉您正在查看页面的哪一部分-
消息抽屉
(而id
最适合识别内容-它总是唯一的)。以及您对该部分中的哪个元素感兴趣。就是这样。如果页面上有任何更改,您基本上不会在意。即使更改了,xpath也会清楚地告诉您选择的目的,以便更容易理解它的含义。永远不要解决睡眠问题:它不可靠(若元素出现的时间比睡眠时间晚1毫秒怎么办?)会减慢测试速度(若元素出现的时间比睡眠时间晚10毫秒怎么办?你们浪费了990毫秒,而且在许多测试中它加起来了)
相反,请使用显式等待模式等待文本出现:
WebDriverWait wait = new WebDriverWait(driver, 10); // wait for max 10 sec
String message = wait.until(ExpectedConditions. visibilityOfElementLocated(By.xpath("/html/body/div[2]/div/div/span")).getText();
通过这种方式,您可以告诉selenium最多等待元素10秒,但如果元素出现在之前,它将返回得更快
另一件事:xpath之类的/html/body/div[2]/div/div/span
不是您通常应该使用的东西(有些情况下是不可避免的,但很少使用)。原因:
- 首先,通过查看路径,您无法判断您选择的是什么。因此,如果HTML发生变化,您将很难弄清楚该语句以前做了什么
- 按索引选择(例如,
)是非常容易破坏的:只需在所选div的上方再出现一个div,xpath就会破坏div[2]
- 你很少需要选择绝对路径。专注于重要的部分
<div class="alert-messages" id="message-drawer" style="top: -40px;">
<div class="message ">
<div class="message-inside">
<span class="message-text"></span>
</div>
</div>
</div>
它告诉您正在查看页面的哪一部分-
消息抽屉
(而id
最适合识别内容-它总是唯一的)。以及您对该部分中的哪个元素感兴趣。就是这样。如果页面上有任何更改,您基本上不会在意。即使更改了,xpath也会清楚地告诉您选择的目的,以便更容易理解其含义。我说只需更改路径,因为如果它没有检索文本,则可能无法获取正确的路径path.No deal.NoTouchElement异常。我还尝试使用cssSelector而不是xpath,但也失败了。因此,如果这是您要查找的字段的正确路径,那么我的下一个问题是……这是在尝试获取用户名或密码字段的文本吗?不,这是在您键入错误日志时尝试获取错误消息的文本在中。我无法保证这是正确的路径,但我已尝试使用不同的定位器。如果可以,获取错误消息文本的目的是什么?我说只需更改路径,因为如果它没有检索文本,则可能无法获得正确的路径。无交易。无接触元素异常。我还尝试使用cssSelector而不是xpath,xpath也失败了。因此,如果这是您要查找的字段的正确路径,那么我的下一个问题是……这是在尝试获取用户名或密码字段的文本吗?不,它是在您键入错误登录名时尝试获取错误消息的文本。我无法保证这是正确的路径,但我尝试使用了differ租用定位器。如果可以的话,获取错误消息文本的目的是什么?JavaScript!=Java。你是想将其标记为JavaScrip问题吗?@sofend我正在通过JUnitJavaScript!=Java在Java中运行Selenium测试。你是想将其标记为JavaScrip问题吗?@sofend我正在通过JUnitI do在Java中运行Selenium测试不
//div[@id='message-drawer']//span[@class='message-text']