Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从jquery的id update找到的WebElement中获取文本_Java_Jquery_Webdriver_Selenium Webdriver - Fatal编程技术网

Java 从jquery的id update找到的WebElement中获取文本

Java 从jquery的id update找到的WebElement中获取文本,java,jquery,webdriver,selenium-webdriver,Java,Jquery,Webdriver,Selenium Webdriver,我正在尝试从和id中获取一些文本,以便稍后在测试中使用它。我可以找到以下元素: WebElement jrnrText = driver.findElement( By.id("ctl00_content_createnewschema_modalAlert_alertMessage")) 但问题是,jquery稍后会动态添加该值,因此当我进入页面时,该id将出现。然后单击一个按钮,jquery将更新id 我知道我可以使用jrnrText.getText(),但这不会

我正在尝试从和id中获取一些文本,以便稍后在测试中使用它。我可以找到以下元素:

WebElement jrnrText = driver.findElement(
             By.id("ctl00_content_createnewschema_modalAlert_alertMessage"))
但问题是,jquery稍后会动态添加该值,因此当我进入页面时,该id将出现。然后单击一个按钮,jquery将更新id

我知道我可以使用jrnrText.getText(),但这不会给我任何东西,因为在我单击按钮之前,id不包含任何内容

这是我的代码:

driver.findElement(By.id("ctl00_content_createnewschema_btnCreate")).click();

WebElement jrnrText = driver.findElement(
     By.id("ctl00_content_createnewschema_modalAlert_alertMessage"))

if(jrnrText.isDisplayed()){
    wait.until(presenceOfElementLocated(By.xpath('''//td[contains(text(),"part of the text"]''')))
}

println jrnrText.getText()

你的问题令人困惑,但我会尽力回答。首先,如果一个元素的ID是根据用户输入动态变化的,那么它完全违背了ID的目的。这是一个应该在web站点中修复的错误


如果由于某种原因无法修复错误,那么我们需要更多的细节。在上面显示的代码中,它在哪里失败?当您说“在单击按钮之前,id不包含任何内容”时,您的意思是id为“ctl00\u content\u createnewschema\u modalAlert\u alertMessage”的元素不存在吗?即使它发生在您所说的按钮点击后更新ID?

没有人?我对它进行了更多的研究,并认为也许您可以将事件与selenium结合使用。因此,在我点击按钮后,获取页面的源代码。但我不确定该怎么做。看起来我必须添加一个FireEventWebDriver并实现,EventListiner说它一直在失败。下面是API文档,如果有人知道或者可以看一下如何做到这一点:很抱歉这个令人困惑的问题。改变的不是ID,而是值。事情是这样的:我点击一个按钮,它将执行一个javascript:u doPostBack。这将调用一些asp.net代码来生成一些文本。现在我得到了一个提示:当我单击按钮时,会显示一个文本(我想jquery弹出窗口)。如果我选择该弹出窗口,我可以获取源代码,它将显示以下内容:
我想要的文本
Ok,那么失败的是什么?看起来很简单,您可以通过ID找到button元素,单击按钮,通过ID找到span并调用getText()。它在什么时候失败,错误消息是什么?它找不到跨度吗?我得到了跨度,但是会动态地添加值,所以当我调用getText()时,字符串是空的。我的猜测是,我必须检查跨度是否为空,是否为空,然后等待它得到一个值。好的,我终于理解了这个问题。不过,听起来你已经找到了答案。只需等待文本不是空字符串。此外,请确保元素已显示,如果未显示,则getText将始终返回空字符串,而不管它是否真的为空。是的,谢谢Sam。但问题是我不知道如何等待getText()不为空。我不知道怎么说wait.unti(get.Text()!=null)之类的。我的猜测是,当一个函数可以找到包含文本的Xpath表达式的元素时,该函数将返回true。你有没有关于如何使用xpath实现这一点的ide?查找包含文本的id,任何文本。