我在我的Page中编写了以下方法.class用于重用隐式等待。
public WebDriver waitForElementToLoad(WebElement element)
{
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.presenceOfElementLocated((By) element));
return (driver);
}
在我的测试中。我使用的类是页面工厂元素,例如:
//Save button
@FindBy(xpath = "//*[@*='Save']")
private WebElement saveButton;
现在我正试图从测试中调用:waitForElementToLoad(saveButton)。
。类,但我得到下面的错误。
“java.lang.ClassCastException:class.com.sun.proxy.$Proxy12不能转换为class.org.openqa.selenium.By(com.sun.proxy.$Proxy12和org.openqa.seleniuma.By位于加载器'app'的未命名模块中)。”
我也试过了
WebElement saveButton = driver.findElement(By.xpath("//*[@*='Save']"));
waitForElementToLoad(saveButton);
但是运气不好。
我怎样才能做到这一点?
此错误消息...
java.lang.ClassCastException: class com.sun.proxy.$Proxy12 cannot be cast to class org.openqa.selenium.By (com.sun.proxy.$Proxy12 and org.openqa.selenium.By are in unnamed module of loader 'app')
…表示试图强制转换代理对象时发生ClassCastException。
您需要考虑以下几件事:
> < li >您在< code > waitForElementToLoad()中引入的等待本身不是隐式等待,而是显式等待。请参阅:隐式等待和显式等待的内部工作区别是什么 < Li > < code > presenceOfElementLocated()不保证任何元素的可见性或可交互性。因此,对于可见性或交互性,您需要使用匹配的预期条件< code > visibility of(web element element)或< code > elementtoclickable(By locator)。有关详细信息,请参见:Selenium:Selenium如何识别可见或不可见的元素?有没有可能是加载在DOM里却没有呈现在UI上? < li>
如果您的用例涉及诱导WebDriverWait,您可以在< code > waitForElementToLoad()中以代理对象的形式传递WebElement saveButton,如下所示:
package com.pol.zoho.PageObjects;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
public class ZohoLoginPage {
WebDriver driver;
public ZohoLoginPage(WebDriver driver)
{
PageFactory.initElements(driver, this);
}
//Save button
@FindBy(xpath = "//*[@*='Save']")
private WebElement saveButton;
public void waitForElementToLoad()
{
WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(ZohoLoginPage.getWebElement()));
saveButton.click();
}
public WebElement getWebElement()
{
return saveButton;
}
}
您可以在以下网站中找到一些相关的讨论:
如果需要对包含异步加载元素的“Page”类使用ExpectedConditions
,我建议使用以下方法:
AjaxElementLocator
,其中覆盖受保护的布尔值isElementUsable(WebElement元素)
,以便它使用预期条件
来决定元素是否可以使用AjaxElementLocatorFactory
其中覆盖public ElementLocator createLocator(Field field)
方法,以便它现在返回扩展类的实例PageFactory.initElements(new MyAjaxElementLocatorFactory(驱动程序,10),this);
其中MyAjaxElementLocatorFactory
是您在步骤2上创建的类WebDriverWait
是显式等待,而不是隐式等待。而且你不能把WebElement
投给By
。
如果 saveButton
不是空的
,而不是页面工厂已经找到的,等待它的存在是没有意义的,这就是为什么你没有 WebElement
的重载。请改为等待可见性
wait.until(ExpectedConditions.visibilityOf(element));
问题内容: 我已经熟悉Android框架和Java,并希望创建一个通用的“ NetworkHelper”类,该类可以处理大多数联网代码,使我能够从中调用网页。 我遵循了来自developer.android.com的这篇文章来创建我的网络类:http : //developer.android.com/training/basics/network- ops/connecting.html 码:
我正在编写一个方法,如果我想将一个类传递给一个方法,其中代码的一部分包括检查对象是否属于某种类型。这就是我想要的(但显然不行): 关于如何做到这一点有什么提示吗?谢谢!
我有静态方法在我的类 这就是定义 这里用的是 这是我得到的一个错误 E0167类型为“void(TV_DepthCamAgent::)(int count,int copied_file)”的参数与类型为“void()(int,int)”的参数不兼容 错误C3867“TV_DepthCamAgent::progress_callback”:非标准语法;使用' 我做错了什么?
问题内容: 我正在创建一个分页类,需要将两个参数传递给我的LIMIT子句的MySQL存储过程。 我将它们作为INT传递给我,并尝试这样的事情 但是,当我尝试保存该存储过程时,它给了我一个错误。有什么方法可以让我错过吗?还是我必须评估整个查询并执行它? 问题答案: 在5.5.6之前的版本中,无法在MySQL存储过程中进行参数化。您需要动态构建查询并执行它。 在5.5.6及更高版本中,只要将存储的pr
问题内容: 我很好奇Go中是否有可能。我有多种方法的类型。是否可以有一个函数,该函数需要一个方法参数,然后将其称为类型? 这是我想要的一个小例子: Go认为type 有一个称为的方法,而不是用传入的方法名称替换它。 问题答案: 是的,有可能。您有2(3)个选项: 规范:方法表达式 该表达式产生的功能与第一个参数等效,但具有一个显式接收器。它有签名。 在这里,方法接收器是显式的。您只需将方法名称(具
在下面的代码中,我希望将'races.class'作为参数传递给方法'get allraces()'。我该怎么做?