关于seleniuminvalidelementstate的信息

今天给各位分享seleniuminvalidelementstate的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

selenium-python:整个代码有时候不报错正确操作,但有时候就会报错,不懂为什么?

报错的exception叫做NoSuchElementException,意思就是没有这个element元素

那很有可能就是你要打开的这个页面还没加载完成,所以你要去点击这个element就会报这种错误

你可以在这个click()操作之前加判断,判断网页是否加载完成,完成后再进行后续操作

发起请求后,有response,你可以通过response的属性来确认网页是否加载完成,好像是status这个属性,具体你百度下,这里只是说下思路

selenium点击不了?滑屏失败?

之前写过几种可能: 在这里

我出现的问题:

第一:没有全屏模式,出现了其他按钮的遮挡

解决方案是:

driver.maximize_window()

第二:滑屏出现了问题

我参考的这一篇文章: selenium_通过selenium控制浏览器滚动条

里面的方法我都实验了一遍   不知道为什么 效果不理想

最後花钱找人解决了问题

driver.execute_script('document.documentElement.scrollTop={0}'.format(9000))

一条金贵的代码

最後附上代码  实现翻页  

import time

from seleniumimport webdriver

chrome_options = webdriver.ChromeOptions()

chrome_options.add_argument('--headless')

chrome_options.add_argument('--disable-gpu')

chrome_options.add_argument("'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'")

driver = webdriver.Chrome(chrome_options=chrome_options)

driver.get("")

driver.maximize_window()

driver.find_element_by_xpath('//a[@title="蜂蜂点评"]').click()

driver.get_screenshot_as_file(r'C:\Users\weidu\PycharmProjects\day21\pachong\test\dianping.png')

# driver.execute_script("window.scrollBy(0,100000)")

driver.get_screenshot_as_file(r'C:\Users\weidu\PycharmProjects\day21\pachong\test\fanye.png')

driver.implicitly_wait(10)

# driver.switch_to.frame(0)

for _in range(5):

driver.execute_script('document.documentElement.scrollTop={0}'.format(9000))

time.sleep(1)

driver.find_element_by_xpath("//*[text()='后一页']").click()

WebDriver软件怎样使用?

使用Selenium WebDriver驱动浏览器测试的过程中多多少少会遇到一些折腾人的问题,总结了一部分,做下分享。

一、隐藏元素处理(element not visible)

使用WebDriver点击界面上被隐藏的元素时,使用默认的IWebElement.Click()方法可能无法触发Click事件,这时的修改方案可以采用执行JS的方式来实现。

IWebElementwebElement = driver.FindElement(By.Id(elementId));

IJavaScriptExecutorjs = driverasIJavaScriptExecutor;

js.ExecuteScript("arguments[0].click();",webElement);

二、页面跳转后找不到元素(no such element)

页面跳转获取新页面的元素需要时间,所以需要在跳转后增加等待时间,最通用的方法是判断在某个时间内元素是否加载完成。

driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(10));

三、屏蔽动画

如果网站使用了JQuery的动画效果,我们在运行测试的时候可以disable JQuery的animation,代码如下:

IJavaScriptExecutorjs = driverasIJavaScriptExecutor;

js.ExecuteScript("jQuery.fx.off=true");

四、不确定出现的元素处理

有的网站首次访问时会弹出广告,第二次访问则不再显示,这种情况可以自己调用WebDriver的IsElementPresent(Byby)方法进行判断

if(IsElementPresent(Byby)))

{

driver.FindElement(by).Click();

}

五、Cookie登录

自动化测试中,许多地方要求登录,cookie能够实现不必每次输入用户名和密码进行登录。

Cookiecookie =newCookie(name,value,domain,path,expires);

driver.Manage().Cookies.AddCookie(cookie);

说明:参数分别为Cookie的名称,内容,域,路径,过期时间。

六、图片上传

参考:《Selenium(C#)实现图片上传的两种方式》

七、带placeholder属性的输入框Clear无效(invalid element state)

自动测试时,会出现某些带有默认值的输入框Clear()方法报错,错误提示:invalid element state: Element is not currently interactable and may not be manipulated,此时需要检查下输入文本框是否带有placeholder属性,如果有则直接略过Clear方法,原因如下:

placeholder定义和用法

placeholder属性提供可描述输入字段预期值的提示信息(hint)。

该提示会在输入字段为空时显示,并会在字段获得焦点时消失。

八、切换窗口

参考《WebDriver(C#)之窗口切换》

foreach(stringwinHandleindriver.WindowHandles)  //遍历当前打开的窗口

{

driver.SwitchTo().Window(winHandle);

if(driver.Title.Contains(title)) //title是新窗口的Title

{

break;

}

}

九、Iframe元素定位

如果一个页面是一个html元素,只有一个head,一个body,使用driver.FindElement()可以查找页面中任何一个元素。但是,页面中如果嵌入frame…../是的页面包含多个html元素,这种情况下就先要定位到元素所在的frame,然后再查找对应的元素,代码如下:

IWebElementframe. = driver.FindElement(By.XPath(".//*[@id='form1']/div[1]/div[1]/iframe"));

driver.SwitchTo().Frame(frame);

十、Firefox代*理设置

WebDriver每次启动一个Firefox的实例时,会生成一个匿名的profile,并不会使用当前Firefox的profile。所以如果要访问需要通过代*理的web服务,直接设置Firefox的代*理是没用的,因为WebDriver启动的Firefox不会使用该profile,需要在代码里设置FirefoxProfile属性,或者直接调用默认的profile。

publicIWebDriverProxyConfig()

{

FirefoxProfilefirefoxProfile =newFirefoxProfile();

firefoxProfile.SetPreference("network.proxy.type",1);

firefoxProfile.SetPreference("network.proxy.http","192.168.1.11");

firefoxProfile.SetPreference("network.proxy.http_port",8888);

firefoxProfile.SetPreference("network.proxy.no_proxies_on","");

returnnewFirefoxDriver(firefoxProfile);

}

或者启动默认的profile

stringpath =@"C:\Users\username\AppData\Local\Mozilla\Firefox\Profiles\a8xlln4m.default";

FirefoxProfileffprofile =newFirefoxProfile(path);

driver =newFirefoxDriver(ffprofile);

你需要知道的有关Selenium异常处理的都在这儿

什么是异常?

顾名思义,作为程序员的一种常用术语,“异常”与任何特定的编程语言无关。它属于程序因为突然中止,而未能交付出预期输出的事件。通常,引发异常出现的潜在因素往往来自如下方面:

· Java虚拟内存(JVM)的不足

· 请求访问的文件在目标系统中不存在

· 用户提供了无效的数据

· 在正常的通信过程中突然出现断网

Java中的异常类型

1. 已查明的异常(Checked Exceptions):编译器在编译的过程中,会检查到这些异常,并验证它们是否已被处理。如果未被处理,系统会报告编译错误。因此它们被通称为编译时异常(compile-time exceptions)。下面是一些常见的此类异常示例:

· SQLException:程序在基于 SQL 语法执行 数据库 查询时,可能会产生此类异常。

· IOException:程序在文件上执行无效的I/O流操作时,可能会产生此类异常。

· ClassNotFoundException:当JVM无法找到所需的Java类时,可能会产生此类异常。

2. 未查明的异常(Unchecked Exceptions):这些异常是在程序的执行期间发生的逻辑错误,因此通常称为运行时异常(Runtime Exceptions)。此类异常在编译时未被检查出来,或者在整个编译过程中已被忽略。下面是一些典型的此类异常示例:

· NullPointerException:当访问具有空值的对象时,可能会产生此类异常。

· ArrayIndexOutofBound:当使用无效的索引值去访问数组时,可能会产生此类异常。

· IllegalArgumentException:当程序将不正确的参数传递给方法时,可能会产生此类异常。

· NumberFormatException:当程序将字符串传递给无法转换为数字的方法时,可能会产生此类异常。

· ArithmeticException:当程序执行不正确的算术运算(例如将数字除以零)时,可能会产生此类异常。

异常处理标准

通过对异常处理能力的提升,我们不仅可以保持代码的整洁,而且能够增强其可维护性、可扩展性和可阅读性。当然,不同的面向对象编程(Object-Oriented Programming,OOP)语言,具有不同的异常处理方法。以下是一些常用的Java异常处理标准:

Try-Catch:该关键字组合可被用于捕获异常。其中,try块应当被放在开头,而catch块应被放在try块的末尾,以便捕获异常,并采取必要的行动。也就是说,我们可以在遇到异常时,创建异常类的对象,以便使用以下预定义的方法,来显示调试信息:

· printStackTrace():该函数可用于打印栈的跟踪、异常的名称、以及其他重要的异常信息。

· getMessage():此函数有助于获取针对异常的深入描述。

try

{

// Code

} catch(Exception e){

// Code for Handling exception

}

同时,Try-Catch块也可以用其他高级方法来处理异常,例如,我们可能希望从单个代码块中捕获多个异常,那么就可以通过在try块之后的多个catch块,去处理不同的异常。而且,我们在try块之后,使用无限数量的catch块。

try

{

//Code

} catch(ExceptionType1 e1){

//Code for Handling Exception 1

} catch(ExceptionType2 e2){

//Code for Handling Exception 2

}

Throw/Throws:如果程序员想显式地抛出异常,那么可以使用throw关键字,与要在运行时处理的异常对象协同使用。

public static void exceptionProgram()throws Exception{

try {

// write your code here

} Catch(Exception b){

// Throw an Exception explicitly

throw(b); }

}

如果开发者想抛出多个异常,则可以通过在方法签名的子句中使用throws关键字来抛出,并且由方法的调用者去进行异常处理。

public static void exceptionProgram()throws ExceptionType1, ExceptionType2{

try {

// write your code here

} catch(ExceptionType1 e1){

// Code to handle exception 1

} catch(ExceptionType1 e2){

// Code to handle exception 2

}

finally:该个代码块往往是在try-catch块之后被创建的。也就是说,无论是否抛出异常,它都会被执行。

try {

//Code

} catch(ExceptionType1 e1){

//Catch block

} catch(ExceptionType2 e2){

//Catch block

} finally {

//The finally block always executes.

}

Selenium中的常见异常

WebDriverException定义了Selenium中的多种异常,我们从中选取最常见的异常予以介绍,并配上简单的针对Selenium的异常处理方案:

   1. NoSuchElementException

当WebDriver无法定位所需要元素时,Selenium可能会产生此类异常。此处的NoSuchElementException是NotFoundException类的子类,它通常出现在程序使用了无效的定位器时。

此外,如果WebDriver仍然停留在上一页、或正在加载下一页,而所需的定位器已到达了下一页时,就会因为该延迟而出现异常。为此,我们应当通过适当的等待处理 测试 ,最大限度地减少此类异常的发生。

当然,此类异常可以在catch块中被捕获到,并且可以在其中执行所需的操作,以继续完成自动化的测试。例如:

try { driver.findElement(By.id("form-save")).click(); } catch(NoSuchElementException e){

System.out.println(“WebDriver couldn’t locate the element”); }

   2. NoSuchWindowException

该异常也是NotFoundException类的子类。如果WebDriver尝试着切换到无效的 浏览器 窗口,那么WebDriver将抛出NoSuchWindowException。因此,要实现窗口切换的好方法是,首先获取活动窗口的会话,然后在对应的窗口上执行所需的操作。例如:

for(String windowHandle : driver.getWindowHandles()){

try { driver.switchTo().window(handle); } catch(NoSuchWindowException e){ System.out.println(“Exception while switching browser window”); }

}

3. NoAlertPresentException

当WebDriver尝试着切换到某个不存在或无效的警报时,Selenium可能会产生此类异常。对此,我建议开发者使用显式、或适当的等待时间,来处理浏览器的各类警报。倘若仍然等不到警报的话,catch块可以捕获该异常。例如:

try {

driver.switchTo().alert().accept(); } catch(NoSuchAlertException e){

System.out.println(“WebDriver couldn’t locate the Alert”); }

   4. ElementNotVisibleException

该异常被定义为ElementNotInteractableException类的子类。当WebDriver尝试着对不可见的元素、或不可交互的元素执行各项操作时,Selenium可能会产生此类异常。对此,我建议开发者在的确需要之处,让Selenium进行适当的超时等待。例如:

try { driver.findElement(By.id("form-save")).click(); } catch(ElementNotVisibleException e){

System.out.println(“WebDriver couldn’t locate the element”); }

5. ElementNotSelectableException

该异常属于InvalidElementStateException类的子类。在Selenium中,ElementNotSelectableException表明某个元素虽然存在于网页上,但是无法被WebDriver所选择。

catch块不但可以处理Selenium中的此类异常,而且可以使用相同或不同的 技术 ,重新选择相同的元素。例如:

try {

Select dropdown = new Select(driver.findElement(By.id(“swift”))); } catch(ElementNotSelectableException e){

System.out.println("Element could not be selected")}

6. NoSuchSessionException

Selenium通过driver.quit()命令退出自动化的浏览器会话后,以及在调用某个测试方法时,会产生此类异常。当然,如果浏览器崩溃或出现断网,该异常也可能会发生。为了避免出现NoSuchSessionException,我们可以在测试套件结束时,退出浏览器,并确保用于 自动化测试 的浏览器版本的稳定性。例如:

private WebDriver driver;

@BeforeSuite

public void setUp(){ driver = new ChromeDriver(); }

@AfterSuite

public void tearDown(){ driver.quit(); }

   7. StaleElementReferenceException

当DOM中不再存在程序所需的元素时,Selenium将抛出StaleElementReferenceException。当然,如果DOM未能被正确加载、或WebDriver被卡在错误的页面上时,也可能会产生这种异常。对此,您可以使用catch块捕获该异常,并且使用动态的XPath、或尝试着重新刷新页面。例如:

try { driver.findElement(By.xpath(“//*[contains(@id,firstname’)]”)).sendKeys(“Aaron”);

} catch(StaleElementReferenceException e){

System.out.println("Could not interact with a desired element")}

8. TimeoutException

当WebDriver超过了执行下一步的等待时限时,Selenium中可能会产生此类异常。Selenium的各种等待通常被用于避免出现ElementNotVisibleException之类的异常。不过,即使在使用了适当的等待之后,如果元素仍然不可交互,那么TimeoutException也会被抛出。为此,我们必须通过执行手动测试,来检验元素的延时性,以便采取进一步的处理等待。

9. InvalidSelectorException

当使用无效的或不正确的选择器时,Selenium中会抛出此类异常。当然,类似情况也可能发生在创建XPATH时。对此,我们需要在将代码推送到主分支之前,检查测试脚本,并测试脚本的端到端流程。此外,SelectorHub和ChroPath等工具,也可以被用于验证定位器。

10. NoSuchFrameException

NoSuchFrameException属于NotFoundException类的子类。当WebDriver尝试着切换到当前网页上无效的、或不存在的框架时,Selenium可能会产生此类异常。为此,我们需要首先确保框架的名称或id是正确的;其次,应确保框架的加载不会过于消耗时间。当然,如果在网页上加载框架的确非常耗时的话,则需要修正相应的等待处理。例如:

try {

driver.switchTo().frame("frame_1"); } catch(NoSuchFrameException e){

System.out.println("Could not find the desired frame")

}

小结

综上所述,为了适应各种场景,异常处理对于任何自动化脚本和逻辑结构都是至关重要的。请您务必在了解每个异常特征的基础上,有选择性地在自动化脚本中使用上述十种有关Selenium的常用异常处理命令。

Selenium 报错问题

查到Remote_connection 里面的exceute方法中,链接url的response 报错 404。 猜测是在跳转到支付页面时,先断开之前的链接,再去请求支付的链接,而断开时,请求的链接就会返回404.  

解决方法:可以先用time.sleep 等待几秒钟去链接新的页面,然后再用 driver.implicitly_wait 方法就可以了

将获取元素和动作拆分开来

解决方法如下:

getcode = driver.find_element_by_id("com.mingyuan.dwinmall:id/btn_get_code")

time.sleep(50)

getcode.click()

电脑关机,然后在开机时按住  command  +  R 键 ,直到出现苹果 logo 和进度条时松开,进入OS X恢复模式。在终端输入命令csrutil disable,然后关闭终端。进入恢复模式后打开 【实用工具】 —— 【终端】

mv: rename chromedriver to /usr/bin/chromedriver: Read-only file system

然后百度的时候我又找到这样的一篇文章,参考类似的问题,我试着直接执行如下命令挂载写入权限

sudo mount -uw /这时候再试一次sudo mv chromedriver /usr/bin

ele = driver.find_element_by_xpath ("//p[@class='comment-form-rating-btn']/button" )# star

webdriver.ActionChains ( driver ).move_to_element ( ele ).click ( ele ).perform ()

解决方法:切换到最后一个窗口

windows =self.driver.window_handles

self.driver.switch_to.window (-1)

6.'list' object has no attribute 'click'

将”driver.find_elements_by_xpath“改为“driver.find_element_by_xpath”即可解决。

seleniuminvalidelementstate的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、seleniuminvalidelementstate的信息别忘了在本站进行查找喔。

1、本网站名称:源码村资源网
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » 关于seleniuminvalidelementstate的信息
您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论