gpt4 book ai didi

java - 单击相关按钮

转载 作者:太空宇宙 更新时间:2023-11-04 12:30:39 25 4
gpt4 key购买 nike

我的页面显示了许多产品,我需要找到一种方法来单击所选产品的相关按钮(产品名称来自数据表)。每个产品的详细信息都存储在 div class="cf"

<div class="cf">
<div class="component ticket-item-base ticket-item-options cf">
<div class="ticket-image">
<picture>
<span class="alt-text">City 7 day megarider</span>
</div>
<div class="ticket-item-details">
<h3>City 7 day megarider</h3>
<ul>
<li class="icon ticket-calendar">Unlimited travel X76 service.</li>
<li class="icon ticket-location">
<li class="icon ticket-person">1 adult</li>
<li class="icon ticket-discount">Save when you buy online</li>
<li class="terms">
<a class="open-popup" href="#ticket-item-terms-popup-0-9">Full terms & conditions for this ticket</a>
</li>
</ul>
</div>
<div class="ticket-fulfilment-price">
<div class="row">
<div class="ticket-option">
<div class="ticket-price-panel">
<label>Total</label>
<div class="ticket-price">
<div class="button-cart-wrapper cf">
<a class="submit-btn uniform-button button-orange button-smaller button-cart" data-ticket-id="7b0c3c08-a82a-4421-8232-dbb15def3428" href="#">
<span class="js-info-pop-up">Add to basket</span>
</a>
<div class="component added-to-basket-pop-up info-pop-up cf" style="display: block;">
<a class="close-icon" href="#">
<span class="alt-text">Close</span>
</a>
<p>
<span>1 ticket</span> added to basket.
</p>
<a class="link-arrow" href="/basket">View basket</a>
</div>
</div>
</div>
</div>
<div class="more-details-panel">
<div class="row">
<div class="more-details-panel">
</div>
<div id="ticket-item-terms-popup-0-9" class="overlay white-popup mfp-hide zoom-anim-dialog rich-text cf">
</div>
</div>
</div>

以下是我解决此问题的步骤:

  1. 获取产品名称。
  2. 检查该产品是否在线销售,然后点击其相关按钮。找到产品后我想点击的按钮是:添加到购物篮和关闭图标。

最新代码:

// List products that have class-cf
List<WebElement> listProduct = driver.findElements(By.xpath(
"//html/body/div/div[4]/div/div/div[4]/div/div[2]/div[3]/div/ul/li[1]/div/div[@class='accordion-content cf']/div[@class='cf']"));

for (WebElement eachElem : listProduct)
{
System.out.println("Searching for the exact element:");

if (eachElem.getText().contains(TicketName))
{
// Identify the button to click on
WebElement button = eachElem.findElement(By.xpath(".//span[@class='js-info-pop-up']"));

// WebElement button = eachElem.findElement(By.xpath("//div/div/div[1]/div/div/a/span[contains(text(),'Add to basket')]"));

Thread.sleep(500);
break; // Break out of iteration.
}
}

最佳答案

我找到了你的网站...:)

我通常处理此类任务的方式是获取一个外部元素,其中包含我关心的每个项目的所有内容。在这种情况下,正如您提到的,我们正在寻找 div class="cf"。一旦获得“容器”元素,我就开始寻找我关心的子元素。在本例中,两个 h3 标签分别表示门票名称和购买地点。将门票名称与我要查找的门票名称进行比较并确保购买位置在线后,我单击“添加到购物篮”链接和关闭按钮(两者都仍然是子项)。

下面是工作代码。您可能需要在开始时添加等待。该网站有时似乎很慢,有时由于某种原因,搜索会在前几个项目完全加载之前开始。我将把这个问题留给你来解决。

driver.get("https://www.stagecoachbus.com/regionaltickets/yorkshire/rotherham/megarider");

// close the Please set your location popup
driver.findElement(By.cssSelector("#location-overlay > a.close-icon.js-close-overlay")).click();

String desiredTicketName = "22X 7 day megarider"; // read this from sheet
System.out.println("Looking for: " + desiredTicketName);
WebDriverWait wait = new WebDriverWait(driver, 10);
List<WebElement> ticketContainers = wait
.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.cssSelector("div[class='cf']")));
for (WebElement ticketContainer : ticketContainers)
{
List<WebElement> h3s = ticketContainer.findElements(By.tagName("h3"));
String currentTicketName = h3s.get(0).getText();
String currentPurchaseLocation = h3s.get(1).getText();
if (currentTicketName.contains(desiredTicketName) && currentPurchaseLocation.contains("Smart - online"))
{
// found the ticket and it's sold online

// click Add to basket
ticketContainer.findElement(By.cssSelector("a.submit-btn")).click();

// click Close
wait.until(ExpectedConditions.visibilityOfNestedElementsLocatedBy(ticketContainer, By.cssSelector("a.close-icon"))).get(0)
.click();

break;
}
}

关于java - 单击相关按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37877344/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com