使用硒时删除按钮卡住但正常工作
Delete button is stuck when using selenium but normally it is working
我创建了一个脚本,我想通过该脚本取消发布一个元素,然后删除页面上存在的所有列表。这两个选项都是取消发布和删除。看起来当我们点击图标时(所以当我们点击图标时两个元素都会显示)
现在,当我要单击删除按钮时,应该会出现一个授权弹出窗口,但是当我使用 selenium 时不会发生这种情况,而当我正常使用网站(没有 selenium)时,它工作正常。
每一行都有许多未发布和删除按钮。
我也尝试过使用 JavascriptExecutor 和 Actions
我的代码:-
List<WebElement> unpublishlink1 = d.findElements(By.cssSelector("a.action-publish.action_profile_unpublish"));
List<WebElement> deletelink1 = d.findElements(By.cssSelector("em.icon16.icon16-delete"));
WebElement deleted = null;
for ( WebElement deletelink: deletelink1) {
WebElement cogiconlink = d.findElement(By.className("device-action-menu-arrow"));
cogiconlink.click();
deleted=deletelink;
}
for ( WebElement unpublishlink: unpublishlink1) {
while (unpublishlink.isDisplayed() || deleted.isDisplayed() ) {
if (unpublishlink.isDisplayed()) {
unpublishPopup(d,unpublishlink, deleted);
} else {
deleteAlert(d,deleted);
}
}
}
}
public void unpublishPopup(WebDriver d,WebElement unpublishlink,WebElement deleted)
{
unpublishlink.click();
d.findElement(By.id("Unpublish_Profile"));
d.findElement(By.id("UnpublishProfileReason")).sendKeys("lish");
d.findElement(By.id("UnpublishProfilePassword")).sendKeys("@123");
d.findElement(By.id("UnpublishProfileYes")).click();
d.manage().timeouts().implicitlyWait(60000, TimeUnit.MILLISECONDS);
d.get(d.getCurrentUrl());
deleteAlert(d, deleted);
}
public void deleteAlert(WebDriver d,WebElement deleted)
{
d.manage().timeouts().implicitlyWait(60000, TimeUnit.MILLISECONDS);
d.get(d.getCurrentUrl());
WebDriverWait wait = new WebDriverWait(d, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(d.findElement(By.cssSelector("em.icon16.icon16-delete"))));
WebElement deleteLink=d.findElement(By.cssSelector("em.icon16.icon16-delete"));
deleteLink.click();
//JavascriptExecutor executor = (JavascriptExecutor) d;
//executor.executeScript("arguments[0].click();", deleteLink);
d.switchTo().alert().accept();
d.manage().timeouts().implicitlyWait(60000, TimeUnit.MILLISECONDS);
d.get(d.getCurrentUrl());
System.out.println("going out");
try{
Thread.sleep(5000);
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
我的HTML代码:-
图标代码:-
<div class="device-action-menu">
<div class="device-action-menu-placeholder"></div>
<span class="device-action-menu-arrow"></span>
<ul class="device-action-menu-ul">
取消发布按钮代码:-
<li><a href="javascript:;" class="action-publish action_profile_unpublish" profilename="Test_Agent_1_Cleinrt" profileid="1764" rel="https://mysite/profilec/profileunpublish/1764" title="Unpublish Profile"><em class="icon16 icon16-wipe"></em></a></li>
删除按钮代码:-
<li><a href="javascript:;" class="action-delete delete_action" rel="https://mysite/profilec/delete/1434" title="Delete Profile"><em class="icon16 icon16-delete"></em></a></li>
你能试试这个吗:
JavascriptLibrary jsLib = new JavascriptLibrary();
jsLib.callEmbeddedSelenium(driver,"triggerMouseEventAt", element,"click", "0,0");**
我创建了一个脚本,我想通过该脚本取消发布一个元素,然后删除页面上存在的所有列表。这两个选项都是取消发布和删除。看起来当我们点击图标时(所以当我们点击图标时两个元素都会显示)
现在,当我要单击删除按钮时,应该会出现一个授权弹出窗口,但是当我使用 selenium 时不会发生这种情况,而当我正常使用网站(没有 selenium)时,它工作正常。
每一行都有许多未发布和删除按钮。
我也尝试过使用 JavascriptExecutor 和 Actions
我的代码:-
List<WebElement> unpublishlink1 = d.findElements(By.cssSelector("a.action-publish.action_profile_unpublish"));
List<WebElement> deletelink1 = d.findElements(By.cssSelector("em.icon16.icon16-delete"));
WebElement deleted = null;
for ( WebElement deletelink: deletelink1) {
WebElement cogiconlink = d.findElement(By.className("device-action-menu-arrow"));
cogiconlink.click();
deleted=deletelink;
}
for ( WebElement unpublishlink: unpublishlink1) {
while (unpublishlink.isDisplayed() || deleted.isDisplayed() ) {
if (unpublishlink.isDisplayed()) {
unpublishPopup(d,unpublishlink, deleted);
} else {
deleteAlert(d,deleted);
}
}
}
}
public void unpublishPopup(WebDriver d,WebElement unpublishlink,WebElement deleted)
{
unpublishlink.click();
d.findElement(By.id("Unpublish_Profile"));
d.findElement(By.id("UnpublishProfileReason")).sendKeys("lish");
d.findElement(By.id("UnpublishProfilePassword")).sendKeys("@123");
d.findElement(By.id("UnpublishProfileYes")).click();
d.manage().timeouts().implicitlyWait(60000, TimeUnit.MILLISECONDS);
d.get(d.getCurrentUrl());
deleteAlert(d, deleted);
}
public void deleteAlert(WebDriver d,WebElement deleted)
{
d.manage().timeouts().implicitlyWait(60000, TimeUnit.MILLISECONDS);
d.get(d.getCurrentUrl());
WebDriverWait wait = new WebDriverWait(d, 10);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(d.findElement(By.cssSelector("em.icon16.icon16-delete"))));
WebElement deleteLink=d.findElement(By.cssSelector("em.icon16.icon16-delete"));
deleteLink.click();
//JavascriptExecutor executor = (JavascriptExecutor) d;
//executor.executeScript("arguments[0].click();", deleteLink);
d.switchTo().alert().accept();
d.manage().timeouts().implicitlyWait(60000, TimeUnit.MILLISECONDS);
d.get(d.getCurrentUrl());
System.out.println("going out");
try{
Thread.sleep(5000);
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
}
我的HTML代码:-
图标代码:-
<div class="device-action-menu">
<div class="device-action-menu-placeholder"></div>
<span class="device-action-menu-arrow"></span>
<ul class="device-action-menu-ul">
取消发布按钮代码:-
<li><a href="javascript:;" class="action-publish action_profile_unpublish" profilename="Test_Agent_1_Cleinrt" profileid="1764" rel="https://mysite/profilec/profileunpublish/1764" title="Unpublish Profile"><em class="icon16 icon16-wipe"></em></a></li>
删除按钮代码:-
<li><a href="javascript:;" class="action-delete delete_action" rel="https://mysite/profilec/delete/1434" title="Delete Profile"><em class="icon16 icon16-delete"></em></a></li>
你能试试这个吗:
JavascriptLibrary jsLib = new JavascriptLibrary();
jsLib.callEmbeddedSelenium(driver,"triggerMouseEventAt", element,"click", "0,0");**