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
Javascript 当ID发生变化时,如何使用selenium作为输入框的目标?_Javascript_Selenium_Yammer - Fatal编程技术网

Javascript 当ID发生变化时,如何使用selenium作为输入框的目标?

Javascript 当ID发生变化时,如何使用selenium作为输入框的目标?,javascript,selenium,yammer,Javascript,Selenium,Yammer,尝试自动化处理Yammer的某些测试。我想做的是使用selenium发布一些东西,但当我点击文本框时,它会改变它的id。此外,每次页面重新加载或发布时,该文本框都会改变它的id 所以我接下来做的是使用通配符,告诉selenium查找 //input[starts-with(id, 'yamjs')] 然而,我很快发现yamjs同时用于更新主体和“+添加人员通知”文本框 两者之间的区别似乎在于阶级。我们感兴趣的文本框有一个class=“yj tapf textarea”,而添加人员通知文本框有一

尝试自动化处理Yammer的某些测试。我想做的是使用selenium发布一些东西,但当我点击文本框时,它会改变它的id。此外,每次页面重新加载或发布时,该文本框都会改变它的id

所以我接下来做的是使用通配符,告诉selenium查找

//input[starts-with(id, 'yamjs')]
然而,我很快发现yamjs同时用于更新主体和“+添加人员通知”文本框

两者之间的区别似乎在于阶级。我们感兴趣的文本框有一个
class=“yj tapf textarea”
,而添加人员通知文本框有一个
class=“yj callout bar entry field”


如何让selenium在类yj tapf textarea中找到id以yamjs开头的输入字段,而不是类yj callout bar输入字段中的输入字段?

似乎我没有对类及其位置给予足够的关注。以下是我最终得到的结果:

driver.findElement(By.className("yj-auto-width-fake-textarea")).click();
driver.findElement(By.className("yj-tapf-textarea")).sendKeys(Text);
driver.findElement(By.id("yj-yam.ui.publisher.old.SubmitButton")).click();

如果id发生变化,那么这可能是一个提示,提示不要使用id作为定位器


使用CSSSelector和XPath可以为您提供更稳定、更可靠的定位器

页面(或表单)的结构无论输入的ID/类名如何,始终保持不变?否。似乎只有在单击yj-tapf-textarea后,yj标注栏输入字段才会出现。您是否尝试过类似于存储
class=“yj tapf textarea”中的内容的方法
在一个变量中,并在该变量中搜索您想要的输入?否。我该如何做?在python中:
myclass=browser.find\u element\u by\u class('yj-tapf-textarea')
myclass.find('input')
这将返回一个列表,然后您可以迭代该列表,直到找到您想要的(作为测试进行迭代,当您知道需要哪些输入时删除迭代)。希望我讲得通。