Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
是否可以将html注入我的selenium测试?_Selenium_Xpath - Fatal编程技术网

是否可以将html注入我的selenium测试?

是否可以将html注入我的selenium测试?,selenium,xpath,Selenium,Xpath,假设我们有WebElementfoofoo有一个外观疯狂、不断变化的xpath。硬编码foo在你不得不经常这样做的时候会变得非常烦人 我刚刚在Firebug上发现了html编辑,这让我想知道,我是否可以在Selenium测试中只编写id值?测试中的任何WebElement都明显缺少noid值,这一点已经变得非常陈旧 提前感谢。在Firebug或Chrome开发工具中编辑HTML只是暂时的。一旦关闭浏览器,所做的更改就会消失。除了要求开发人员向所需元素添加ID之外,没有真正的解决方案。我假设你没有

假设我们有WebElement
foo
foo
有一个外观疯狂、不断变化的xpath。硬编码
foo
在你不得不经常这样做的时候会变得非常烦人

我刚刚在Firebug上发现了html编辑,这让我想知道,我是否可以在Selenium测试中只编写
id
值?测试中的任何WebElement都明显缺少no
id
值,这一点已经变得非常陈旧


提前感谢。

在Firebug或Chrome开发工具中编辑HTML只是暂时的。一旦关闭浏览器,所做的更改就会消失。除了要求开发人员向所需元素添加ID之外,没有真正的解决方案。我假设你没有自己的网站,或者这是不可能的,或者你会提到它。欢迎使用测试自动化,网站创建者在创建网站时不考虑测试自动化…:)

对于问题,是否可以将html注入我的selenium测试中,答案是肯定的。您可以使用
JavaScriptExecutor
将html注入您的网页

((JavascriptExecutor) driver).executeScript("arguments[0].id = 'abc';", element);

正如JeffC提到的,要注入id或任何HTML,必须首先识别所需的元素。此外,刷新页面后,更改将丢失。

@alecxe这与此问题完全不同。是的,这是关于更改属性,但OP询问如何避免硬编码长/复杂的XPath。更改属性并不能解决这个问题,因为您必须使用相同的XPath来查找要更改其属性的元素。。。所以这没用。但是答案是除了有开发人员插入ID等,没有其他答案。但我假设这不是一个选项。@JeffC恐怕你是对的。我有点不确定是否要关闭它,但决定继续,等待OP返回给我,如果我关闭它是错误的。谢谢