xpath / SelfHealing.py
sridharKikkeri's picture
Update SelfHealing.py
df98efc verified
from transformers import LlamaForCausalLM, LlamaTokenizer
import torch
from playwright.sync_api import sync_playwright
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# Define the input model for the request
class InputData(BaseModel):
text: str
# Load LLaMA 2 model and tokenizer
model_name = "meta-llama/Llama-2-7b-hf" # Use appropriate LLaMA 2 model variant
tokenizer = LlamaTokenizer.from_pretrained(model_name)
model = LlamaForCausalLM.from_pretrained(model_name)
# Example function to generate alternative locators using LLaMA 2
def generate_alternative_locators(html_content, failed_locator):
prompt = f"""
The following HTML structure contains a failing locator: "{failed_locator}".
Suggest alternative XPaths or CSS selectors that could identify the same element.
HTML:
{html_content}
"""
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(inputs["input_ids"], max_length=500)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
suggestions = response.split("\n") # Assuming each suggestion is on a new line
return suggestions
# Example of self-healing process using Playwright and LLaMA 2 suggestions
@app.post("/predict")
def attempt_self_healing(page, failed_locator: str):
# Retrieve HTML of the page
html = page.content()
# Get alternative locators from LLaMA 2
suggestions = generate_alternative_locators(html, failed_locator)
print("Suggested alternatives:", suggestions)
# Attempt to click with alternative locators
for locator in suggestions:
try:
page.locator(locator.strip()).click()
print(f"Self-healing successful with locator: {locator}")
return
except Exception as e:
print(f"Locator failed: {locator}, Error: {e}")
print("Self-healing failed. No valid locator found.")