如何使用Selenium IDE处理React Select组件

时间:2017-04-03 03:49:47

标签: selenium automated-tests selenium-ide qa react-select

我遇到了Selenium IDE位置元素

的问题

这是链接:https://jedwatson.github.io/react-select/

我用这个命令取得了成功:

Command: sendKeys
Target: css=div.Select-control input
Value: Victoria${KEY_ENTER}

但是我不知道用这样的相同元素处理下一个字段

<div class="Select-placeholder">Select...</div>

问题是如何使用Selenium IDE处理这个问题?

4 个答案:

答案 0 :(得分:1)

查看您的页面,您不能像第一个字段一样使用css=div.Select-placeholder input的原因是输入不是占位符元素的子元素。你需要使用像//div[@class='Select-placeholder']/..//input这样的xpath来找到Select-placeholder元素,向上导航到父元素然后找到输入。但问题是,有多个输入字段与此匹配。

您可以使用:(//div[@class='Select-placeholder'])[1]/..//input将“1”替换为您要定位的元素的任何实例,但如果可以,我建议修改页面本身的代码,以使每个输入字段唯一可识别(添加例如id标签)因为它会使你的自动化变得不那么脆弱,并且如果需要更改/更多这些输入的顺序等,则可能会失败。

答案 1 :(得分:0)

你可以这样做

<span id='your_id'>
	<Select
	 className='no_matter'
     options={this.selectItems}
    />
</span>

以这种方式通过selenium ide找到

<tr>
	    <td>waitForElementPresent</td>
	    <td>css=[id='your_id']> div > div > div > input</td>
	    <td></td>
    </tr>

并选择选择方式中的项目:

<tr>
	    <td>sendKeys</td>
	    <td>css=[id='your_id]> div > div > div > input</td>
	    <td>1${KEY_ENTER}</td>
</tr>

答案 2 :(得分:0)

我能够做到如下:

Actions act = new Actions(driver);//driver variable is chrome web driver ref

WebElement selectInput=driver.findElement(By.className("Select-input"));//Thread.sleep(5000);

act.click(selectInput).build().perform();//Thread.sleep(5000);

//list of all option
List<WebElement> selectValues=driver.findElements(By.className("Select-option"));//Thread.sleep(5000);

//first option:
WebElement firstWebElement=selectValues.get(0);//Thread.sleep(5000);

act.click(firstWebElement).build().perform();//Thread.sleep(5000);

我已经为线程注释了睡眠,因为我在本地运行,有时需要时间从远程机器上的UI获取元素,因此在这种情况下取​​消注释Thread.sleep并尝试。

答案 3 :(得分:0)

使用Python Selenium,我有同样的问题来创建一个新选项:

menu = selenium.find_element_by_css_selector(".Select")
(ActionChains(selenium)
    .move_to_element(menu)
    .click()
    .send_keys('whatever new option,'))
    .perform()
)

尝试将光标移动到第一个选项。