为什么 PhantomJS 在输入字段输入时只输入最后一个字母?

Why PhantomJS type only the last letter when we give an input to input field?

提问人:Oreliya Fernando 提问时间:3/8/2016 最后编辑:Artjom B.Oreliya Fernando 更新时间:3/16/2016 访问量:77

问:

我使用 Selenium WebDriver 和 PhantomJS 作为我的浏览器和 Windows7 操作系统。

我的代码如下。

public void TC_PMS_015() throws Exception{
    driver.switchTo().defaultContent();
    driver.switchTo().frame(0);
    homePg.clickFrontOffice();

    driver.switchTo().defaultContent();
    driver.switchTo().frame("main");
    FOManageReservationPg   =   homePg.clickFOManageReservation();

    driver.switchTo().defaultContent();
    driver.switchTo().frame("main");
    driver.switchTo().frame("frmTabmenu_spnTabMenus_0");
    Sleep(6);
    FOManageReservationPg.clickClearButton();
    Sleep(3);
    FOManageReservationPg.selectHotel(prop.getProperty("hotel"));
    Sleep(3);
    FOManageReservationPg.enterVoucherNumberToSearch(prop.getProperty("vouchernumber"));
    Sleep(3);
    FOManageReservationPg.clickSearchButton();
    Sleep(6);
    homePg  =   FOManageReservationPg.clickCloseButton();
    }

这是输入凭证号码的方法。

public void enterVoucherNumberToSearch(String VoucherNo) {
        txtVoucherNo    =   driver.findElement(By.xpath("//input[@id='txtVoucherNo']"));
        uiSendKeys(txtVoucherNo, VoucherNo);
    }

这是 uiSendKeys 方法。

public void uiSendKeys(WebElement uiElement,String value) {
        uiElement.clear();
        uiElement.sendKeys(value);
    }

当我执行这个测试用例时,“enterVoucherNumberToSearch”方法只取凭证的最后一个字母。

例如:我输入“RH0000337”作为我的凭证编号,但它输入的是“7”。

java selenium-webdriver phantomjs

评论


答:

1赞 MikeJRamsey56 3/10/2016 #1

也许元素尚未完全加载。我会试试这个:

public void enterVoucherNumberToSearch(String VoucherNo) {
  WebDriverWait wait = new WebDriverWait(driver, 60);
  wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='txtVoucherNo']")));
  txtVoucherNo = driver.findElement(By.xpath("//input[@id='txtVoucherNo']"));
  uiSendKeys(txtVoucherNo, VoucherNo);
}

更新

继续前进,我将尝试的下一个更改是:

public void uiSendKeys(WebElement uiElement,String value) {
    uiElement.clear();
    WebDriverWait wait = new WebDriverWait(driver, 60);
    wait.until(ExpectedConditions.textToBePresentInElement(uiElement, '');

    uiElement.sendKeys(value);
    WebDriverWait wait = new WebDriverWait(driver, 60);
    wait.until(ExpectedConditions.textToBePresentInElement(uiElement, value);
}

评论

0赞 Oreliya Fernando 3/10/2016
我在enterVoucherNumberToSearch方法中添加了等待,但它没有解决我的问题。我打印了 xpath 并得到了以下输出。从 xpath ----- > 设置后的凭证 nuber [[PhantomJSDriver: phantomjs on XP (d3630600-e681-11e5-80bf-41e6ba53f1fa)] -> xpath://input[@id='txtVoucherNo']]
0赞 MikeJRamsey56 3/11/2016
@OreliyaFernando我刚刚注意到了一些事情。
0赞 MikeJRamsey56 3/11/2016
@OreliyaFernando 隐式等待设置是什么?也许它需要设置得更高。driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS);
1赞 Oreliya Fernando 3/16/2016 #2

这发生在 PhantomJs 版本中。 我之前的 PhantomJs 版本是 1.9.1 我已将我的版本更新到 2.0.0 当我更新我的 PhantomJs 驱动程序时,发送密钥方法已获取全文,没有遗漏任何字母。