java+selenium 对隐藏的元素进行操作失败 解决错误element not interactable

如下图登录功能,大部分都是在登录等功能上,需要点击登录后才浮现一个登录面板,此为隐藏的div,里面的input,button都是隐藏元素,针对隐藏元素,是可以定位到的,但是。。。。。。。。。。不能进行操作,操作元素包含click(),sendkeys()等功能,会报错如果报错误element not interactable  网上有些解释说隐藏元素不可以操作,要用js的方式(这个说法有点错误),虽然js确实可以,但是实际上很多问题不用js方式也可以处理

首先检查是否唯一

很多情况之所以能定位但是不能操作是因为,.页面上不止有唯一的元素.你可以用findElements的方式查找,肯定不是唯一的,但是由于你用findElement。所以只能获取到1个,并且刚好只获取到那个隐藏的不可执行的,所以才操作不来。

那如何确定唯一呢,用ctr+shift+I  调出开发者模式,在console模块那里,输入js查找方式。

例如:document.getElementById(“sds”)这只能查找一个

          document.getElementsByClassName  这个就可以查找多个

如下图,输入脚本后,回车,点开查找结果,length显示为1就是只查找到唯一结果

然后进行显示和等待时间,再操作

 

隐藏元素

如下图有个输入框和一个登录的按钮,本来是显示的

元素的属性隐藏和显示,主要是type="hidden"style="display: none;"属性来控制的,接下来在元素属性里面让它隐藏

如何定位隐藏元素

定位隐藏元素和普通的元素没啥区别

		// Login 功能 多种定位方式------------
		// driver.findElement(By.linkText("登录")).click();连接文本方式
		//driver.findElement(By.partialLinkText("首页")).click();  模糊连接文本方式
		// driver.findElement(By.id("loginname")).click();id方式
		// driver.findElement(By.className("ef")).click();class方式
		// driver.findElement(By.name("loginname")).click();name方式
		// driver.findElement(By.tagName("input")).sendKeys("13437868119");tag
		// driver.findElement(By.xpath("//*[@id=\"loginname\"]")).sendKeys("13437868119");Xpath 定位
	    driver.findElement(By.cssSelector("#loginname")).sendKeys("13437868119");

 

操作隐藏元素

隐藏元素可以正常定位到,只是不能操作(定位元素和操作元素是两码事,很多初学者傻傻分不清楚),操作元素是click,clear,send_keys这些方法

如果报错误element not interactable

 

大部分有2个原因可以解决:3步

1.没有先让div面板显示出来,所以不能操作元素(这里注意了,不是定位不到元素,是操作不到元素),通过点击登录按钮,把div登录面板显示出来

driver.findElement(By.xpath("/html/body/div[3]/div/div[2]/div[1]/div[3]/span[1]")).click();
      

2.设置睡眠时间(有3种等待方式,到时再贴出来)

Thread.sleep(50);   

sleep(long millis)  线程睡眠 millis 毫秒  1000毫秒=1秒 所以在这里可以尽量写大写,如果写成Thread.sleep(5);   是很有可能失败,python中的time.sleep(5)就真的是睡眠5秒  所以别搞混了

 

3下面要开始操作元素了

方法一:(大部分这个就够用了)

 

  WebDriverWait  wait = new WebDriverWait(driver, 3000);最大等待3秒时间

   driver.findElement(By.id("loginname")).sendKeys("13437868119");

 

 

     操作方法二:一般前面方法就够了,实在不行,js  方式要  改变input的属性值,再去直接赋值

           String inputName="document.getElementById('loginname').setAttribute('type', 'text')";
          JavascriptExecutor js = (JavascriptExecutor) driver;
          js.executeScript(inputName);
          driver.findElement(By.id("loginname")).sendKeys("13437868119");

  或者:,直接用js赋值

   String inputName = "document.getElementById('loginname').setAttribute('value', 'text')";

     js.executeScript(inputName);

注意事项

在输入账号后,立马输入密码,出现错误

两个操作之间时间太短,容易造成账户密码连接在一起了,所以要先推辞下再去输入密码

    Thread.sleep(50);

  再去进行输入密码操作

最后登录成功

  • 4
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
很高兴能为你解答问题。关于Java Selenium对电商网站进行自动化测试的代码,我们可以先简要介绍一下Selenium框架和自动化测试的概念,然后再提供一些简单的代码示例。 Selenium是一个自动化测试框架,其中包含一些用于自动化网页测试的工具和库。通过Selenium,我们可以使用不同的编程语言(如Java)来自动化测试网页上的交互功能,比如按钮点击、表单填写、数据抓取等。 基本的Selenium测试用例通常包含以下步骤: 1. 启动浏览器 2. 访问测试网站 3. 执行测试动作(如模拟鼠标点击、键盘输入等) 4. 验证测试结果 以下是一个简单的Java Selenium测试用例,用于测试一个电商网站的登录功能: ``` import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.By; import org.openqa.selenium.WebElement; public class EcommerceTest { public static void main(String[] args) { // 设置Chrome浏览器驱动路径 System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver"); // 启动Chrome浏览器 WebDriver driver = new ChromeDriver(); // 访问测试网站 driver.get("https://www.ecommerce.com/login"); // 输入用户名和密码 WebElement username = driver.findElement(By.name("username")); username.sendKeys("testuser"); WebElement password = driver.findElement(By.name("password")); password.sendKeys("testpass"); // 点击登录按钮 WebElement loginButton = driver.findElement(By.id("login-button")); loginButton.click(); // 验证是否登录成功 WebElement welcomeMessage = driver.findElement(By.id("welcome-message")); String messageText = welcomeMessage.getText(); if (messageText.equals("Welcome, testuser!")) { System.out.println("登录成功!"); } else { System.out.println("登录失败!"); } // 关闭浏览器 driver.quit(); } } ``` 上述代码中,我们首先设置了Chrome浏览器驱动路径,然后启动了Chrome浏览器。接着访问了一个测试登录页面,并模拟用户在输入用户名和密码后点击登录按钮的操作。最后通过验证欢迎消息是否包含正确的用户名来判断登录是否成功。 希望这个简单的示例可以帮助你更好地理解如何使用Java Selenium进行自动化测试。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值