Java Selenium Webdriver-无法单击按钮-查找元素

Java Selenium Webdriver-无法单击按钮-查找元素,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,希望有人能帮我解决我的问题。我花了一天的大部分时间,在这里和谷歌上找到了几乎所有的解决方案 我将切入正题。我有一个在一个屏幕上登录的测试。第二个屏幕选择一个角色并继续。我可以进入角色选择屏幕,但无法前进,因为无论我做什么,Selenium都不会单击按钮 有趣的是,这将与IDE一起工作,但是将代码导出到java并使用webdriver运行它也不起作用。这一部分对我来说毫无意义,因为我认为IDE导出应该很容易运行。我能看到的唯一区别是webdriver启动了一个没有配置文件的Firefox,而IDE

希望有人能帮我解决我的问题。我花了一天的大部分时间,在这里和谷歌上找到了几乎所有的解决方案

我将切入正题。我有一个在一个屏幕上登录的测试。第二个屏幕选择一个角色并继续。我可以进入角色选择屏幕,但无法前进,因为无论我做什么,Selenium都不会单击按钮

有趣的是,这将与IDE一起工作,但是将代码导出到java并使用webdriver运行它也不起作用。这一部分对我来说毫无意义,因为我认为IDE导出应该很容易运行。我能看到的唯一区别是webdriver启动了一个没有配置文件的Firefox,而IDE在我的配置文件上运行——不确定这与此有什么关系,但我想把它扔出去

第一个按钮和第二个按钮之间的唯一区别是HTML中的autofocus命令

<button data-submit-button="" class="btn" autofocus="" name="submit" type="submit">Go</button>
这也行不通。我在这方面尝试了几种不同的方法,大多数时候,webdriver要么超时,要么跳过这一步,通过它,然后在接下来的步骤中失败,因为页面没有向前移动

有人有什么建议吗?如果你有任何问题,或者如果我没有提供足够的信息,我可以给你更多的信息!这方面的任何帮助都将是惊人的,因为我花了一天的大部分时间试图解决这一问题


谢谢

有时选择器是这种场景中的主要问题。而且,
name=“submit”
甚至不是一个非常安全的选择器,因为开发人员倾向于在表单中复制相同的属性。在不了解实际元素的情况下,我几乎可以告诉您问题在于选择器。如果文本Go是该页面上按钮的唯一文本,请尝试以下xpath

//button[@name='submit'][@type='submit'][contains(text(),'Go')]
完整的实现应该如下所示:

By xpath = By.xpath("//button[@name='submit'][@type='submit'][contains(text(),'Go')]");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(xpath));

myDynamicElement.click();

谢谢你的回复!然而,它仍然给我带来问题。我在跑步时得到以下信息。。。原因:org.openqa.selenium.InvalidSelectorException:给定的选择器//按钮[@name='submit'][@type='submit']][containts(text(),'Go')]无效或未生成WebElement。发生以下错误:InvalidSelectorError:由于以下错误,无法找到xpath表达式为//button[@name='submit'][@type='submit'][containts(text(),'Go')]的元素:SyntaxError:该表达式不是合法表达式。很抱歉,
contains()
中有键入错误。更正,请再试一次非常感谢!那太好了。还有一点——我已经听了你的一些回答,你总是简明扼要地做到一针见血——很好。@jimtollan,谢谢你。毕竟,我试着分享我的知识,这也是一种很好的学习方式
By xpath = By.xpath("//button[@name='submit'][@type='submit'][contains(text(),'Go')]");
WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(xpath));

myDynamicElement.click();